import { loginRequest, sysProfileRequest } from '@/api/user'
import { getToken, setToken } from '@/utils/auth'
import router, { constantRoutes } from '@/router'
export default {
  namespaced: true,
  state: {
    // token
    // cookie 会伴随着http请求头，自动发送给服务器
    // 每次取值的是，先从cookie里面取，然后再给默认值
    token: getToken() || '',
    // 用户头像信息
    userInfo: {},
    routes: [constantRoutes]
  },
  mutations: {
    // 修改token
    setTokenMutation(state, payload) {
      state.token = payload
      console.log(payload)
      setToken(payload)
    },
    // 储存用户信息里面的头像和姓名
    setInfoMutation(state, payload) {
      state.userInfo = payload
    },
    // 动态添加路由信息
    setRoutes(state, payload) {
      state.routes = [...constantRoutes, ...payload]
    }
  },
  actions: {
    // 发送登录的axios
    async loginActions(context, payload) {
      /* 用了async+await 就必须用try....catch包裹以下否则有些错误就不能捕获---浏览器控制台就会报红色*/
      /*       try {
        const data = await loginRequest(payload)
        console.log('封装请求成功', data)
        context.commit('setTokenMutation', data.data)
      } catch {
        // 收集一些错误日志
      } */
      // 改成then的写法
      try {
        await loginRequest(payload).then(res => {
          console.log(res)
          context.commit('setTokenMutation', res.data)
          // 添加跳转首页
          router.push('/')
        })
      } catch {
        // 收集一些错误日志
      }
    },
    // 发送用户信息的axios
    async setInfoActions(context, payload) {
      try {
        const data = await sysProfileRequest()
        //  console.log(data)
        context.commit('setInfoMutation', data.data)
        return data.data
      } catch {
        console.log('错误信息')
      }
    },
    // 清空储存的token和用户信息里面的token
    logouAction(context) {
      // 直接传一个空字符串给token 传一个空对象给userInfo
      context.commit('setTokenMutation', '')
      context.commit('setInfoMutation', {})
    }
  }
}
